package genetica.cromosomas.evaluadores;

import genetica.cromosomas.fenotipos.Fenotipo;
import genetica.cromosomas.fenotipos.FenotipoFunciones;

import java.util.ArrayList;

public class evaluadorFuncionE extends EvaluadorFuncion {

	private static double maxx1, maxx2, minx1, minx2;
	@Override
	public Double getFunctionValue(ArrayList<Fenotipo> fenotipo) {
		if ((fenotipo.size() < 0) || !(fenotipo.get(0) instanceof FenotipoFunciones)){
			return null;
		}

		double parteA = 0;
		Double x1 = ((FenotipoFunciones) fenotipo.get(0)).getFenotipo();
		for (int i = 1; i < 6; i++) {
			parteA += i*Math.cos((i+1)*x1+i);
		}
		if (parteA > maxx1) maxx1 = parteA;
		if (parteA < minx1) minx1 = parteA;
		double parteB = 0;
		Double x2 = ((FenotipoFunciones) fenotipo.get(1)).getFenotipo();
		for (int i = 1; i < 6; i++) {
			parteB += i*Math.cos((i+1)*x2+i);
		}
		if (parteA > maxx2) maxx2 = parteB;
		if (parteA < minx2) minx2 = parteB;
		return parteA * parteB;
	}
	@Override
	public Double evalua(ArrayList<Fenotipo> fenotipo) {
		// aptitud entre 0-1 inversa 1-aptitud
		return 1-super.evalua(fenotipo);
	}

}
